package com.boot.adminservice.map.service.strategy;

import com.boot.adminservice.map.domain.dto.SysRegionDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

@Component
@RefreshScope
public class GetCityListContext {

    /**
     * 具体策略类
     */
    private GetCityListStrategy currentStrategy;

    /**
     * Spring上下文对象
     */
    private final ApplicationContext applicationContext;

    /**
     * 初始化ApplicationContext对象
     * @param applicationContext Spring上下文
     */
    @Autowired
    public GetCityListContext(ApplicationContext applicationContext) {
        this.applicationContext  = applicationContext;
    }

    // Setter方法注入策略（通过Nacos配置触发）
    @Value("${city.query.strategy}")
    public void setStrategyName(String strategyName) {
        this.currentStrategy  = applicationContext.getBean(strategyName,  GetCityListStrategy.class);
    }

    /**
     * 根据不同策略对象调用不同的获取城市列表方法
     * @return 城市列表
     */
    public List<SysRegionDTO> getCityList() {
        return currentStrategy.getCityList();
    }

    /**
     * 根据不同策略对象调用不同的按首字母A-Z分类的获取城市列表方法
     * @return 按首字母A-Z分类的城市列表
     */
    public Map<String, List<SysRegionDTO>> getCityPyList() {
        return currentStrategy.getCityPyList();
    }
}
